import mysql from 'mysql';
import Logger from '../utils/Logger';

class MySQLService {

    connection = mysql.createConnection({
        host: "175.27.187.8",       //服务器地址,连接本机可以使用localhost或者127.0.0.1
        user: 'root',               //连接数据库的用户名
        password: 'ZuoHui00.',      //连接数据库的密码
        database: 'yeqi',           //数据库的名称
        port: 3306,                 //数据库端口号,默认3306,可以省略不写
        autoReconnect:true          //永久连接
    });

    constructor() {
        this.connection.connect();
        //定时查询保持活性
        setInterval(()=>{this.connection.query('SELECT 1');},5000);
    }

    /** 初始化数据库 */
    init() {
        this.initUser();
    }


    /** 将玩家登录状态归0 */
    /** 将玩家所在房间归-1 */
    initUser() {
        var sql = 'update user set is_logining = ?, room_id = ?';
        let datas = [0,0];
        // 执行sql,并处理执行的结果
        this.connection.query(sql, datas, function (err, result) {
            if (err) {
                Logger.log('初始化失败： ', err.message);
                return;
            }
            Logger.log('初始化成功,受影响的行数：', result.affectedRows);
        });
    }

    /** 查询用户 */
    selectByUsername(username: string | string[], callback: Function) {
        this.connection.query(
            'select * from user where username = ? limit 1', [username],
            function (err, result) {
                callback(result);
            }
        );
    }

    /** 注册用户 */
    insertUser(username: string | string[], password: string | string[]) {
        //username,password,is_logining,room_id,score,groly,number_of_matches,number_of_wins
        let sql = "insert into user values( ? , ? , 0 , 0 , 0 , 0 , 0 , 0)";
        let datas = [username, password];
        this.connection.query(sql, datas, function (err, result) {
            if (err) {
                Logger.log('插入失败', err.message);
                return;
            }
            Logger.log('注册成功：' + username);
        });
    }

    /** 修改登录状态 */
    updateUserLoginState(username: string | string[],state: number){
        let sql = 'update user set is_logining = ? where username = ?';
        let datas = [state,username];
        // 执行sql,并处理执行的结果
        this.connection.query(sql, datas, function (err, result) {
            if (err) {
                Logger.log('登录状态修改失败： ', err.message);
                return;
            }
            Logger.log('登录状态修改，玩家： '+username +" state: "+state);
        });
    }

    /** 修改所在房间号 */
    updateUserRoomId(username: string | string[],room_id: number){
        let sql = 'update user set room_id = ? where username = ?';
        let datas = [room_id,username];
        // 执行sql,并处理执行的结果
        this.connection.query(sql, datas, function (err, result) {
            if (err) {
                Logger.log('修改所在房间号 ', err.message);
                return;
            }
            Logger.log('修改所在房间号，玩家：'+username +" room_id: "+room_id);
        });
    }

    /** 修改玩家分数 */
    updateUserScore(username: string | string[],score: number){
        let sql = 'update user set score = ? where username = ?';
        let datas = [score,username];
        // 执行sql,并处理执行的结果
        this.connection.query(sql, datas, function (err, result) {
            if (err) {
                Logger.log('修改玩家分数 ', err.message);
                return;
            }
            Logger.log('修改玩家分数: '+username +" room_id: "+score);
        });
    }

    /** 排行榜 */
    selectRankingList(callback:Function){
        let sql = 'select username,score from user order by score desc limit 15';
        this.connection.query(sql, [], function (err, result) {
            if (err) {
                Logger.log('获取排行榜失败： ', err.message);
            }else {
                callback(result);
            }
        });
    }
}

export default new MySQLService();
